package com.shuang.hash6;

public class CanConstruct {

    public boolean canConstruct(String ransomNote, String magazine) {

        //使用哈希数组方法 字符串中只有小写英文字母 则可以将字母映射到数组索引位置类似于字母异位词

        //判断 如果magazine比ransomNote要短 那就不可能成立
        if (ransomNote.length() > magazine.length()){
            return false;
        }
        //定义数组 用于记录字母映射到的索引位置出现的次数
        int[] record = new int[26];

        //统计magazine字符串中各个字母出现的次数
        for (int i = 0; i < magazine.length(); i++){
            record[magazine.charAt(i) - 'a']++;
        }

        //统计ransomNote中字母在各个位置出现的次数（剑减法）
        for (char r : ransomNote.toCharArray()){
            record[r - 'a']--;
        }

        //遍历数组中的元素如果有小于零的元素则说明 不成立
        for (int re : record){
            if (re < 0){
                return false;
            }
        }

        return true;

    }
}
